import { ElMessage } from 'element-plus'
/**
 * 以operationDict指定的方式处理请求返回的响应体信息
 * @param {*} response 响应体
 * @param {*} operationDict 操作字典，示例：
 *  {
 *      1: {
 *          "showElMsg": true,
 *          "msg": "操作成功",
 *          "msgType": "success",
 *          "outputToConsole": false
 *      },
 *      1003: {
 *          "showElMsg": true,
 *          "msg": "当前未登录",
 *          "msgType": "error",
 *          "outputToConsole": false
 *      }
 *      2001: {
 *          "showElMsg": true,
 *          "msg": "其他错误",
 *          "msgType": "error",
 *          "outputToConsole": true
 *      }
 *  }
 * 解释：
 * 键(1、-3、1001)：errno错误码
 * showElMsg：是否弹出ElMessage
 * msg：弹出的消息内容
 * msgType：弹出的消息类型，"success", "error", "info", "warning"
 * outputToConsole：是否将响应体输出到控制台（用于调试）
 * 如operationDict没有给出该错误码的处理方式，会以默认方式处理，详见以下“默认操作”
 * @returns errno错误码
 */
export const response2ElMessage = (response, operationDict={}) => {
    let data = response.data, errno = data['errno']
    let showElMsg, msg, msgType, outputToConsole
    
    // 默认操作
    if (errno > 0 && errno < 1000) {
        showElMsg = true
        msg = data['msg']
        msgType = "success"
        outputToConsole = false
    }
    else {
        showElMsg = true
        msg = data['msg']
        msgType = "error"
        outputToConsole = true
    }
    
    // 从operationDict读取操作
    if (errno in operationDict) {
        let operation = operationDict[errno]
        if ('showElMsg' in operation) {
            showElMsg = operation['showElMsg']
        }
        if ('msg' in operation) {
            msg = operation['msg']
        }
        if ('msgType' in operation) {
            msgType = operation['msgType']
        }
        if ('outputToConsole' in operation) {
            outputToConsole = operation['outputToConsole']
        }
    }

    // 执行操作
    if (showElMsg) {
        switch (msgType) {
            case 'success':
                ElMessage.success(msg)
                break
            case 'info':
                ElMessage.info(msg)
                break
            case 'warning':
                ElMessage.warning(msg)
                break
            case 'error':
                ElMessage.error(msg)
                break
        }
    }
    if (outputToConsole) {
        console.log(response)
    }

    return errno
}


export const dict2ElMessage = (operation) => {
    let showElMsg = true
    let msg = "操作成功"
    let msgType = "success"
    let outputToConsole = false

    if ('showElMsg' in operation) {
        showElMsg = operation['showElMsg']
    }
    if ('msg' in operation) {
        msg = operation['msg']
    }
    if ('msgType' in operation) {
        msgType = operation['msgType']
    }
    if ('outputToConsole' in operation) {
        outputToConsole = operation['outputToConsole']
    }

    // 执行操作
    if (showElMsg) {
        switch (msgType) {
            case 'success':
                ElMessage.success(msg)
                break
            case 'info':
                ElMessage.info(msg)
                break
            case 'warning':
                ElMessage.warning(msg)
                break
            case 'error':
                ElMessage.error(msg)
                break
        }
    }
}